// /*
// 定义麻将牌的预制体，创建牌堆，包含初始发牌、摸牌、出牌
// */
// using UnityEngine;
// using System.Collections.Generic;

// //麻将管理器类
// public class Mahjong_Manager:MonoBehaviour
//     {
//         //静态的全局可访问的单例实例
//         public static Mahjong_Manager Instance;
//         //麻将牌预制体
//         public GameObject paiPrefab;
//         //队列存储麻将牌对象池 即麻将牌堆 
//         private Queue<Mahjong_Pai> paiPool=new Queue<Mahjong_Pai>();
//         //玩家手牌
//         private List<Mahjong_Pai> playerHand=new List<Mahjong_Pai>();
//         //定义弃牌位置
//           [Header("麻将牌位置")]
//         public Transform discardPosition;
//         //要在unity中操作，拖拽弃牌区到Mahjong_Manager组件的discardPosition字段中
//         [Header("手牌布局区域")]
//         public Transform handArea;



//         void Awake()//初始化逻辑
//         {
//             if(Instance!=null&&Instance!=this)
//             {
//                 Destroy(gameObject);//保留旧的，销毁新的
//                 return;
//             }
//             Instance=this;//初始化单例 
//             // // 确保预制体已赋值
//             if(paiPrefab == null)
//             {
//              Debug.LogError("未分配麻将牌预制体");
//              return;
//             }
//             GenerateAllPai();//生成所有牌
//             /*加一个洗牌功能进去*/
//             DistributeInitialPai();//分配初始手牌
            
//         }
    




// //1.生成所有牌，确定牌号和类型
//         void GenerateAllPai()
//         {
//             //遍历每张牌
//         foreach(Mahjong_Pai_Type type in System.Enum.GetValues(typeof(Mahjong_Pai_Type)))    
//         {
//             for(int number=1;number<=9;number++)
//             {
//                 for(int i=0;i<4;i++)
//                 {
//                     //生成麻将牌对象，确定了牌号和类型，然后在麻将牌堆里将这个牌出队
//                     //Instantiate是unity中的克隆方法。GetComponent是获取组件的方法。
//                     var newPai=Instantiate(paiPrefab).GetComponent<Mahjong_Pai>();
//                     newPai.Type=type;
//                     newPai.Pai_Number=number;
//                     paiPool.Enqueue(newPai);//出队
//                     Debug.Log($"正在生成 {type} {number}"); 
//                 }
//             }
//         }
//         Debug.Log($"当前牌堆数量：{paiPool.Count}"); 
//         }
//         //2.分配初始手牌
//         void DistributeInitialPai()
//         {
//             for(int i=0;i<16;i++)
//             {
//                 DrawPai();//摸牌，当前只有自己摸，后续增加其余三人摸
//             }
//              Debug.Log("手牌摸到16张，停止摸牌"); 
//             if(playerHand.Count>16)
//              {
//                 Debug.LogError("手牌数量超过16张，错误！");
//              }
//         }

//         //3.摸牌
//        public void DrawPai()
//         {
//            if(paiPool.Count==0)
//            {
//             Debug.Log("牌堆已空，不能再摸牌");
//             /*后续做胜负判断*/
//             return;
//            }

//            if(paiPool.Count>0)
//            {
//             var pai=paiPool.Dequeue();//出队
//             playerHand.Add(pai);
//              Debug.Log($"摸起手牌 {pai.Type} {pai.Pai_Number}"); 
//              UpdateHandArea();
//             /*后续可以加一个手牌数量异常判断，再加一个手牌布局功能*/
//            }
//         }

//         //4.出牌
//       public void PlayPai(Mahjong_Pai pai)
//         {
//             playerHand.Remove(pai);
//             UpdateHandArea();

//             /*后续添加一个手牌移动的动画，移动到弃牌堆
//             对弃牌要不要加一个exist判断？防止弃牌被玩家再次点击*/
//            /* pai.transform.position = discardPosition;？？不确定如何实现移动到弃牌堆*/
//             /*后续写一个用于调整手牌宽度的函数UpdateHandPosition();*/
//         }

//         //5.更新手牌显示状态
//         public void UpdateHandArea()
//         {
//             //清空手牌
//             foreach(Transform child in handArea)
//             {
//                 Destroy(child.gameObject);
//             }
//             //遍历生成新的手牌
//             foreach(var pai in playerHand)
//             {
//                 var paiObj=Instantiate(paiPrefab,handArea);
//                 //设置牌号和类型
//             var paiComponent=paiObj.GetComponent<Mahjong_Pai>();
//             paiComponent.Type=pai.Type;
//             paiComponent.Pai_Number=pai.Pai_Number;
//             }
//         }


// }
        
